iT邦幫忙

2024 iThome 鐵人賽

DAY 3
1
Modern Web

Vue UI 探索:PrimeVue 學習之旅系列 第 3

[Day3] Theming - Styled Mode

  • 分享至 

  • xImage
  •  

Styled Mode 根據 Design token(設計標籤)規劃三種層級:primitive(原始)、semantic(語意) 以及 component(元件)。

  1. primitive:在原始樣式設計中,該樣式名稱不具語意,會以原始顏色名稱作為命名規則,比如 blue-50blue-900。通常由語意使用,如 blue-500 可做為主色的背景色,但本身名稱不具有內容意義。
  2. semantic:在語意樣式設計中,該樣式名稱具有明確的內容定義,定義其使用的位置,較廣為人知的是主色命名 primary.color。語意標籤可對應於原始標籤或其他的語意標籤,設定時使用 colorScheme 群組進行語意標籤的定義,也可根據語意標籤設計對應深色模式。
  3. component:在元件樣式設計中,該樣式獨立於每個元件,比如輸入框元件的背景色對應到 .inputtext.background、按鈕元件的文字顏色對應 .button.color

階層概念:button.background 按鈕元件標籤對應到 primary.color 語意標籤;primary.color 語意標籤又對應到 green.500 原始標籤。

Styled mode

介面配置

theme:自訂預設初始的主題,本次採用 primeVue 的主題 Aura。

import PrimeVue from 'primevue/config';
import Aura from '@primevue/themes/aura';

const app = createApp(App);

app.use(PrimeVue, {
    // Default theme configuration
    theme: {
        preset: Aura,
        options: {
		        prefix: 'p', // 前綴,預設為 p
            darkModeSelector: 'system',
            cssLayer: false
        }
    }
 });

其中,

  1. preset 為主題設定, Aura 為 primeVue 提供的主題
  2. options 為可選的 CSS 樣式設定,包含深色模式、CSS 樣式前綴及 CSS Layer。
    1. prefix 預設為 p,即 CSS 變數前綴皆帶有 p,如主色 primary.color 的設計標籤,使用該變數時為 var(—p-primary-color),若使用預設可不寫。
    2. darkModeSelector 為深色模式設定,預設為 system 產生 @media (prefers-color-scheme: dark) ,若要進行深色模式的切換,須定義一個 CSS 類別選擇器(比如 .my-dark),在 document root 上切換此樣式,以達到深色模式的渲染。
    3. cssLayer 在 CSS 層內定義樣式,可宣告自訂讀取的順序,預設為 false。如下程式碼在整合 tailwindCSS 時,order 的讀取會先以 tailwind-base 載入初始 reset 樣式或清除瀏覽器預設樣式,再讀取 primevue 主題設定樣式,最後讀取 tailwind 的通用類別。
options: {
    cssLayer: {
        name: 'primevue',
        order: 'tailwind-base, primevue, tailwind-utilities'
    }
}

主題樣式自訂

使用 definePreset 方法可自訂主題內容:

import PrimeVue from 'primevue/config';
import { definePreset } from '@primevue/themes';
import Aura from '@primevue/themes/aura';

const MyPreset = definePreset(Aura, {
    // 將客製化樣式設定於此
});

app.use(PrimeVue, {
    theme: {
        preset: MyPreset // 取代 Aura
    }
});

semantic 的應用

根據上述的 Styled Mode 規則設計,使用 semantic 設定 primary 主題色設定:

const MyPreset1 = definePreset(Aura, {
    semantic: {
        primary: {
            50: '{indigo.50}',
            100: '{indigo.100}',
            ...
            950: '{indigo.950}'
        }
    }
});
app.use(PrimeVue, {
    theme: {
        preset: MyPreset1 // 取代 Aura
    }
});

semantic > colorScheme 的應用

根據 semantic 內的 colorScheme 設定深淺色模式:

const MyPreset2 = definePreset(Aura, {
    semantic: {
        colorScheme: {
            light: {
                primary: {
                    50: '{indigo.50}',
				            100: '{indigo.100}',
				            ...
				            950: '{indigo.950}'
                }
            },
            dark: {
                primary: {
                    50: '{zinc.50}',
				            100: '{zinc.100}',
				            ...
				            950: '{zinc.950}'
                }
            }
        }
    }
});
app.use(PrimeVue, {
    theme: {
        preset: MyPreset2 // 取代 Aura
    }
});

其他設定如表單樣式、Focus Ring 及元件可再依照專案所需客製樣式。

PrimeVue UI 元件字體

採用 rem 作為字體單位,1rem 即為 16px,若要將整體網站的文字大小設定為 14px,可採用如下設定:

html {
    font-size: 14px;
}

上述提及的主題設定、深色模式及整合 tailwindCSS 會在後面有篇幅進行說明~

參考連結:https://primevue.org/theming/styled/


上一篇
[Day2] PrimeVue 安裝
下一篇
[Day4] Theming - Unstyled Mode
系列文
Vue UI 探索:PrimeVue 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
hokou
iT邦好手 1 級 ‧ 2024-09-06 09:28:45

剛好在看 primeVue

preset: Aura 來看的話,primary-color 的預設顏色是綠色,如果想改成藍色的話應該怎麼調整比較好?

看了官網還是不太懂,明明調色盤有很多顏色可選

謝謝

linachen iT邦新手 5 級 ‧ 2024-09-06 10:05:25 檢舉

您好,

此篇的 semantic 的應用 有提到可以透過 definepreset 更換主色,
需要設定 50-900 的相關色系

所以如果要更換成藍色可以在 main.js 設定下

import PrimeVue from 'primevue/config';
import { definePreset } from '@primevue/themes';
import Aura from '@primevue/themes/aura';

const MyPreset = definePreset(Aura, {
    semantic: {
        primary: {
            50: '{blue.50}',
            100: '{blue.100}',
            200: '{blue.200}',
            300: '{blue.300}',
            400: '{blue.400}',
            500: '{blue.500}',
            600: '{blue.600}',
            700: '{blue.700}',
            800: '{blue.800}',
            900: '{blue.900}',
            950: '{blue.950}'
        }
    }
});

app.use(PrimeVue, {
    theme: {
        preset: MyPreset
    }
 });

其他可以更換的顏色我有在 theme 設定這篇的最下方提到可以查查,
可以試試能不能成功~

hokou iT邦好手 1 級 ‧ 2024-09-06 10:20:42 檢舉

感謝回饋,沒想到改個主色就算客製化,總算看懂官網一些
一開始以為是在 options 那邊追加設定主色為藍色之類的就可以了說
結果都沒看到

v4 算剛改版,很多設定也跟之前不同,gpt 都會亂回

我要留言

立即登入留言